bitkeeper revision 1.814 (405e9e2f2N33e61cODYJiwTCPjf5Cw)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Mon, 22 Mar 2004 08:05:03 +0000 (08:05 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Mon, 22 Mar 2004 08:05:03 +0000 (08:05 +0000)
memory.c:
  Fix broken fix from yesterday. :-)

xen/common/memory.c

index bf61820af598fbad2c0d391a18743f8cc2114be4..7d218f868bf53887dead90494644b2d7ec404ce3 100644 (file)
@@ -776,6 +776,7 @@ static int do_extended_command(unsigned long ptr, unsigned long val)
     int okay = 1, cpu = smp_processor_id();
     unsigned int cmd = val & MMUEXT_CMD_MASK;
     unsigned long pfn = ptr >> PAGE_SHIFT;
+    unsigned long old_base_pfn;
     struct pfn_info *page = &frame_table[pfn];
 
     switch ( cmd )
@@ -831,10 +832,10 @@ static int do_extended_command(unsigned long ptr, unsigned long val)
         {
             invalidate_shadow_ldt();
             percpu_info[cpu].deferred_ops &= ~DOP_FLUSH_TLB;
+            old_base_pfn = pagetable_val(current->mm.pagetable) >> PAGE_SHIFT;
             current->mm.pagetable = mk_pagetable(pfn << PAGE_SHIFT);
-            write_cr3_counted(pagetable_val(current->mm.pagetable));
-            put_page_and_type(&frame_table[pagetable_val(current->mm.pagetable)
-                                          >> PAGE_SHIFT]);
+            write_cr3_counted(pfn << PAGE_SHIFT);
+            put_page_and_type(&frame_table[old_base_pfn]);
         }
         else
         {